//#include <stdio.h>
//#include <iostream>
//#include <utility>
#include "tablero_ref.h"

using namespace std;

const map<int, int> Tablero_ref::T_ref = create_t();

class Estado{

  map<pair<int,int>, char> tablero;
  char jugador;
  int columna;

 public:
  Estado();
  Estado(char j);
  Estado(int c);
  Estado(char j, int c);

  ~Estado();
  map<pair<int,int>, char> getTablero()const;
  char getJugador()const;
  int getColumna()const;
  void setTablero(map<pair<int,int>, char> t);
  void setJugador(char j);
  void setColumna(int c);
  int evaluar(char j);
};

Estado::Estado(){
  int colum,fila;
  for(fila=0; fila<6; fila++){
    for(colum=0;colum<7;colum++){
      tablero[make_pair(fila,colum)]='.';
    }
  }
  jugador = 'A';
  columna = 0;
}

Estado::Estado(char j){
  int colum,fila;
  for(fila=0; fila<6; fila++){
    for(colum=0;colum<7;colum++){
      tablero[make_pair(fila,colum)]='.';
    }
  }
  jugador = j;
  columna = 0;
}

Estado::Estado(int c){
  int colum,fila;
  for(fila=0; fila<6; fila++){
    for(colum=0;colum<7;colum++){
      tablero[make_pair(fila,colum)]='.';
    }
  }
  jugador ='A';
  columna = c;
}

Estado::Estado(char j, int c){
  int colum,fila;
  for(fila=0; fila<6; fila++){
    for(colum=0;colum<7;colum++){
      tablero[make_pair(fila,colum)]='.';
    }
  }
  jugador = j;
  columna = c;
}

map<pair<int,int>, char> Estado::getTablero()const{
  return tablero;
}

char Estado::getJugador()const{
  return jugador;
}

int Estado::getColumna()const{
  return columna;
}

void Estado::setTablero(map<pair<int,int>, char> t){
  tablero = t;
}

void Estado::setJugador(char j){
  jugador = j;
}

void Estado::setColumna(int c){
  columna = c;
}

int Estado::evaluar(char j){
  int valor = 0;
  int fila, colum;
  map<int,int> aux = Tablero_ref::T_ref;
  for(fila=0; fila<6; fila++){
    for(colum=0;colum<7;colum++){
      if(tablero[make_pair(fila,colum)]==j)
	valor +=aux[10*fila+colum];
    }
  }
  return valor;
}

Estado::~Estado(){
}
